/*

insmod 传递参数模块

*/

#include <linux/module.h>
#include <linux/init.h>

//定义 int 类型变量 并传递
static int number;
module_param(number, int, S_IRUGO); //S_IRUGO 外部访问表示此参数只读

//定义 char* 类型变量 name 传递
static char* name = "name";
module_param(name, charp, S_IRUGO);

//定义 int数组并 传递
static int para[8] ={0};
static int para_n  = 8; //记录数组长度
module_param_array(para, int, &para_n, S_IRUGO);//第三个参数传递指针因为内核需要修改这个值

//定义字符串并传递
static char str_arr[10] = "param";
module_param_string(str, str_arr, sizeof(str_arr), S_IRUGO);
//第一个参数为命令行传进来时的参数名
//第二个参数为定义的字符串数组名字
//命令行传参时加了'\0'，只能传入sizeof(str_arr) - 1个;

static int __init param_init(void)
{
    int i = 0;
    printk(KERN_EMERG "number: %d\n", number);
    printk(KERN_EMERG "name: %s\n", name);

    for (; i < para_n; ++i)
    {
        printk(KERN_EMERG "para[%d]  : %d", i, para[i]);
    }
    printk(KERN_EMERG "str_arr: %s\n", str_arr);
    return 0;

}

static void __exit param_exit(void)
{
    printk(KERN_EMERG "param_exit\n");
}

module_init(param_init);
module_exit(param_exit);


MODULE_LICENSE("GPL");